const nodemailer = require('nodemailer');
const NodeCache = require('node-cache');
const { MAIL_QQ } = require('@/config/mail.config')
const { createResponse } = require('@/utils/tool')
const moment = require('moment')

// 创建一个NodeCache实例，设置过期时间为60秒
const cache = new NodeCache({ stdTTL: 60 });

// 创建一个SMTP客户端配置对象
const QQ_Postbox = nodemailer.createTransport({
  host: 'smtp.qq.com',
  port: 465,
  secure: true,
  auth: {
    user: MAIL_QQ.user,
    pass: MAIL_QQ.code
  }
});


/**
 * 发送QQ邮件
 * @param {string} to 收件人邮箱
 * @param {string} subject 标题
 * @param {string} [text] 纯文本内容
 * @param {string} [html] 富文本内容
 * @returns 响应信息
 */
function sendEmailToQQ(to, subject, text = '', html = '') {
  // 检查该收件人是否在缓存中
  const info = cache.get(to);
  if (info && info.state) {
    return createResponse({ code: 429, message: `请勿频繁发送邮件，请在${info.time}后重试` })
  }

  // 设置邮件信息
  let mailOptions = {
    from: MAIL_QQ.user,
    to: to,
    subject: subject,
    text: text,
    html: html
  };

  // 发送邮件
  QQ_Postbox.sendMail(mailOptions, (error, info) => {
    if (error) {
      return createResponse({ code: 500, message: '发送失败', data: `${error}` })
    }
    // console.log('Message sent: %s', info.messageId);

    // 将收件人的邮箱地址添加到缓存中
    let time = moment().add(1, 'm')
    cache.set(to, {
      state: true,
      time: time.format('YYYY-MM-DD HH:mm:ss')
    });
    return createResponse({ code: 200, message: '发送成功', data: info })
  });
}

// 清理所有缓存
// cache.flushAll();
// 查看现在的缓存项
// console.log('cache.keys() :>> ', cache.keys());
// 删除特定的缓存项
// cache.del('key1');
// 删除已经过期的
// cache.check()
// 判断是否存在cache.has()
module.exports = {
  sendEmailToQQ
}